library(htmlwidgets)
library(D3Widget)
devtools::load_all()
?volcanoD3
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Volcano/Volcano.txt")[,1:3]
p  =volcanoD3(data=df,notsig="red",r=10,xangle="30",fc=10,pvalue=0.1,myWidth = 500,myHeight = 900)
p


a = onRender(p,
         "        function downloadSVG() { // 保存svg
          const svg = document.querySelector('svg');
          const source = new XMLSerializer().serializeToString(svg); // 将整个SVG document 对象序列化为一个 XML 字符串。
          onDownload(source, 'text/xml', 'volcano.svg'); // 下载
        }")
a
b = onRender(p,
             '
        function aaa() { // 保存svg
                function onDownload(data, type, name) {
          const blob = new Blob([data], { type }); // 返回一个新创建的 Blob 对象，其内容由参数中给定的数组串联组成。
          const url = window.URL.createObjectURL(blob); // 创建一个url
          const link = document.createElement("a"); // 创建一个a标签
          link.href = url; // 把url 赋值给a标签的href
          link.style.display = "none";
          link.setAttribute("download", name);
          document.body.appendChild(link);
          link.click(); // 触发a标签的点击事件
          URL.revokeObjectURL(url); // 清除Url
          document.body.removeChild(link);
        };
        function downloadSVG() { // 保存svg
          const svg = document.querySelector("svg");
          const source = new XMLSerializer().serializeToString(svg); // 将整个SVG document 对象序列化为一个 XML 字符串。
          onDownload(source, "text/xml", "volcano.svg"); // 下载
        };
        downloadSVG()


        }')
b
getwd()


c = onRender(p,
             "        function downloadSVG(el,x) { // 保存svg
          x.aa='aaaa'
          return x

        }")
c$x
c$jsHooks


d = onRender(p,
             '
        function aaa() { // 保存svg
        		function saveSVGToFile(svgData, filename) {
    const blob = new Blob([svgData], { type: "image/svg+xml" }); // 创建 SVG 的 Blob 对象
    const url = window.URL.createObjectURL(blob); // 创建 URL
    const a = document.createElement("a"); // 创建 <a> 元素
    a.href = url; // 设置链接地址
    a.download = filename; // 设置下载文件名
    document.body.appendChild(a); // 将 <a> 元素添加到页面中
    a.click(); // 模拟点击 <a> 元素，开始下载
    window.URL.revokeObjectURL(url); // 释放 URL 对象
    document.body.removeChild(a); // 下载完成后移除 <a> 元素
}

function downloadSVG() {
    const svg = document.querySelector("svg");
    const svgSource = new XMLSerializer().serializeToString(svg);
    saveSVGToFile(svgSource, "volcano.svg"); // 调用保存函数
}

downloadSVG(); // 调用下载函数




        }',iris)
d
htmlwidgets::saveWidget(b,"b.html")
htmlwidgets::saveWidget(a,"a.html")

htmlwidgets::saveWidget(p,"result.html")

networkD3::saveNetwork()







## Not run:
library(leaflet)

# This example uses browser geolocation. RStudio users:
# this won't work in the Viewer pane; try popping it
# out into your system web browser.
leaflet() %>% addTiles() %>%
  onRender("
    function(el, x) {
      // Navigate the map to the user's location
      this.locate({setView: true});
    }
  ")


# This example shows how you can make an R data frame available
# to your JavaScript code.

meh <- "&#x1F610;";
yikes <- "&#x1F628;";

df <- data.frame(
  lng = quakes$long,
  lat = quakes$lat,
  html = ifelse(quakes$mag < 5.5, meh, yikes),
  stringsAsFactors = FALSE
)

leaflet() %>% addTiles() %>%
  fitBounds(min(df$lng), min(df$lat), max(df$lng), max(df$lat)) %>%
  onRender("
    function(el, x, data) {
      for (var i = 0; i < data.lng.length; i++) {
        var icon = L.divIcon({className: '', html: data.html[i]});
        L.marker([data.lat[i], data.lng[i]], {icon: icon}).addTo(this);
      }
    }
  ", data = df)

## End(Not run)
